﻿using B.S.Outsourcing.ErrorCode;
using MediatR;

namespace B.S.Outsourcing.Writer.Api.Application.Command.OutSourOrderModel
{
    public class CreateOutSourOrderCommand:IRequest<ApiResult<int>>
    {
        public int Id { get; set; }
        /// <summary>
        /// 单据编码，作为该委外订单的唯一标识，可用于区分不同的订单。
        /// </summary>
        public string DocumentCode { get; set; }

        /// <summary>
        /// 业务类型，描述该委外订单所属的业务类别，例如可能有不同的业务场景。
        /// </summary>
        public string BusinessType { get; set; }

        /// <summary>
        /// 计划订单编号，关联该委外订单对应的计划订单，用于跟踪计划与实际执行情况。
        /// </summary>
        public string PlanOrderNumber { get; set; }

        /// <summary>
        /// 物料编码，标识该委外订单涉及的物料，方便进行物料管理和识别。
        /// </summary>
        public string MaterialCode { get; set; }

        /// <summary>
        /// 供应商，记录该委外订单的供应商信息，明确合作方。
        /// </summary>
        public string Supplier { get; set; }

        /// <summary>
        /// 单据日期，表明该委外订单单据的创建日期。
        /// </summary>
        public DateTime DocumentDate { get; set; }

        /// <summary>
        /// 操作员，执行该委外订单相关操作的人员信息。
        /// </summary>
        public string Operator { get; set; }

        /// <summary>
        /// 销售订单编号，关联该委外订单对应的销售订单，便于业务流程的衔接和追溯。
        /// </summary>
        public string SalesOrderNumber { get; set; }

        /// <summary>
        /// 物料名称，具体描述该委外订单涉及的物料的名称。
        /// </summary>
        public string MaterialName { get; set; }

        /// <summary>
        /// 委外合同，记录该委外订单对应的合同信息，用于规范双方的权利和义务。
        /// </summary>
        public string EntrustedContract { get; set; }

        /// <summary>
        /// 单据状态，描述该委外订单单据当前的状态，例如待审核、已审核等。
        /// </summary>
        public string DocumentStatus { get; set; }

        /// <summary>
        /// 审核人，对该委外订单进行审核操作的人员信息。
        /// </summary>
        public string Auditor { get; set; }

        /// <summary>
        /// 订单交货日期，可空字段，预期该委外订单的交货时间。
        /// </summary>
        public DateTime? OrderDeliveryDate { get; set; }

        /// <summary>
        /// 规格型号，详细描述该委外订单涉及物料的规格和型号。
        /// </summary>
        public string SpecificationModel { get; set; }

        /// <summary>
        /// 委外数量，可空字段，记录该委外订单涉及的物料的委托加工数量。
        /// </summary>
        public int? OutsourcingQuantity { get; set; }

        /// <summary>
        /// 业务状态，描述该委外订单业务的整体状态，可能与单据状态有所区别。
        /// </summary>
        public string BusinessStatus { get; set; }

        /// <summary>
        /// 审核日期，可空字段，记录该委外订单完成审核的时间。
        /// </summary>
        public DateTime? AuditDate { get; set; }

        /// <summary>
        /// 需求日期，可空字段，表明对该委外订单物料的需求时间。
        /// </summary>
        public DateTime? RequirementDate { get; set; }

        /// <summary>
        /// 图纸编号，关联该委外订单涉及物料的相关图纸编号，便于查找和参考。
        /// </summary>
        public string DrawingNumber { get; set; }

        /// <summary>
        /// 加工费用，可空字段，记录该委外订单的加工费用金额。
        /// </summary>
        public decimal? ProcessingFee { get; set; }

        /// <summary>
        /// 备注，可用于记录关于该委外订单的额外说明或特殊要求等信息。
        /// </summary>
        public string Remarks { get; set; }

        /// <summary>
        /// 创建日期，记录该委外订单数据的创建时间，默认值为当前时间。
        /// </summary>
        public DateTime CreatedDate { get; set; } = DateTime.Now;

        /// <summary>
        /// 创建人，记录创建该委外订单数据的人员信息。
        /// </summary>
        public string CreatedBy { get; set; }

        /// <summary>
        /// 修改日期，可空字段，记录该委外订单数据最后一次修改的时间。
        /// </summary>
        public DateTime? ModifiedDate { get; set; }

        /// <summary>
        /// 修改人，记录最后一次修改该委外订单数据的人员信息。
        /// </summary>
        public string ModifiedBy { get; set; }
        public int IsDelete { get; set; }
    }
}
